﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;


namespace Clinica_Frba
{

    public partial class FormProfesionalCancelaTurno : Form
    {
        public FormProfesionalCancelaTurno()
        {
            InitializeComponent();
            InicializarCampos();
        }

        private void InicializarCampos()
        {
            /*
            SqlConnection myConnection = new SqlConnection(publico.ConnectionString);
            myConnection.Open();

            string strQuery = "SELECT Desc_Esp FROM ESPECIALIDAD";
            SqlCommand consulta = new SqlCommand(strQuery, myConnection);
            SqlDataReader executeCMD = consulta.ExecuteReader();

            dgvResultadoDeBusqueda.Rows.Clear();
            while (executeCMD.Read())
            {
                cbEspecialidad.Items.Add(executeCMD["Desc_Esp"].ToString());
            }
            */
        }

        virtual protected void dgvResultadoDeBusqueda_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            if (e.ColumnIndex == dgvResultadoDeBusqueda.Columns["Seleccionar"].Index)
            {
                if (e.RowIndex >= 0)
                {


                    SqlConnection myConnection = new SqlConnection(publico.ConnectionString);
                    myConnection.Open();

                    string strAfiliadoID = dgvResultadoDeBusqueda.Rows[e.RowIndex].Cells["IDTurno"].Value.ToString();
                    string strFecha = dgvResultadoDeBusqueda.Rows[e.RowIndex].Cells["Fecha"].Value.ToString();
                    string strMotivo;

                    DateTime dtFecha = DateTime.Parse(strFecha);

                    if (dtFecha <= DateTime.Today)
                    {
                        Dialogos.MostrarMessageDialog("No se pueden cancelar turnos del dia de hoy !");
                        return;
                    }
                    FormMotivo form = new FormMotivo("Por favor, especifique el motivo de la cancelacion.");
                    form.ShowDialog();
                    strMotivo = form.getMotivo();

                    string strQuery = "INSERT INTO CANCELACION(ID_TURNO, Tipo, Fecha, Motivo) VALUES ('" + strAfiliadoID + "','P', CONVERT(DATETIME, '" + DateTime.Today.ToString("yyyy-dd-MM") + "', 103), '" + strMotivo + "')";
                    strQuery = "BEGIN TRANSACTION;" + strQuery + "COMMIT TRANSACTION;";

                    SqlCommand sqlCommand = new SqlCommand(strQuery, myConnection);
                    int executeCMD = sqlCommand.ExecuteNonQuery();

                    if (executeCMD > 0)
                    {
                        Dialogos.MostrarMessageDialog("Cancelacion Satisfactoria");
                        dgvResultadoDeBusqueda.Rows.Clear();
                    }
                }

            }

        }

        private void lBuscar_Click(object sender, EventArgs e)
        {

            if (tbProfesionalID.Text == "")
            {
                Dialogos.MostrarMessageDialog("No hay profesional !");
                return;
            }

            SqlConnection myConnection = new SqlConnection(publico.ConnectionString);
            myConnection.Open();

            string strQuery = "SELECT 'existe' FROM PROFESIONAL WHERE ID_PROF = '" + tbProfesionalID.Text + "'";
            SqlCommand consulta = new SqlCommand(strQuery, myConnection);
            SqlDataReader executeCMD = consulta.ExecuteReader();

            if (!executeCMD.HasRows)
            {
                Dialogos.MostrarMessageDialog("El Profesional no existe");
                return;
            }

            executeCMD.Close();

            strQuery = "SELECT  af.Nombre, af.Apellido, tu.Fecha, tu.ID_AFIL, tu.ID_TURNO FROM TURNO tu JOIN AFILIADO af ON af.ID_AFIL = tu.ID_AFIL WHERE tu.ESTADO = 'T' AND tu.ID_PROF = '" + tbProfesionalID.Text + "';";


            consulta = new SqlCommand(strQuery, myConnection);
            executeCMD = consulta.ExecuteReader();

            dgvResultadoDeBusqueda.Rows.Clear();
            while (executeCMD.Read())
            {
                dgvResultadoDeBusqueda.Rows.Add((executeCMD["nombre"].ToString() + " " + executeCMD["apellido"].ToString()), executeCMD["fecha"].ToString(), executeCMD["Id_afil"].ToString(), executeCMD["Id_turno"].ToString());
            }

            if(dgvResultadoDeBusqueda.Rows.Count == 0 )
            {
                Dialogos.MostrarMessageDialog("El usuario no tiene turnos...");
            }

        }

        private void bCancelarTurnosIntervalo_Click(object sender, EventArgs e)
        {
            if (tbProfesionalID.Text == "")
            {
                Dialogos.MostrarMessageDialog("No hay profesional !");
                return;
            }

            SqlConnection myConnection = new SqlConnection(publico.ConnectionString);
            myConnection.Open();

            string strQuery = "SELECT 'existe' FROM PROFESIONAL WHERE ID_PROF = '" + tbProfesionalID.Text + "'";
            SqlCommand consulta = new SqlCommand(strQuery, myConnection);
            SqlDataReader executeCMDExiste = consulta.ExecuteReader();

            if (!executeCMDExiste.HasRows)
            {
                Dialogos.MostrarMessageDialog("El Profesional no existe");
                return;
            }

            executeCMDExiste.Close();

            string strMotivo;
            DateTime dtDesde = DateTime.Parse(dtpDesde.Text.ToString());
            DateTime dtHasta = DateTime.Parse(dtpHasta.Text.ToString());
            string strDesde = dtDesde.ToString("yyyy-MM-dd");
            string strHasta = dtHasta.ToString("yyyy-MM-dd");

            if (dtDesde <= DateTime.Today )
            {
                Dialogos.MostrarMessageDialog("Intervalo incorrecto, no se pueden cancelar turnos del dia de hoy.");
                return;
            }
            else if (dtHasta < dtDesde)
            {
                Dialogos.MostrarMessageDialog("Intervalo incorrecto !!");
                return;
            }

            FormMotivo form = new FormMotivo("Por favor, especifique el motivo de la cancelacion.");
            form.ShowDialog();
            strMotivo = form.getMotivo();

            strQuery = "INSERT INTO CANCELACION(ID_TURNO, Tipo, MOTIVO, Fecha) SELECT ID_TURNO, 'P', '" + strMotivo + "', CONVERT(DATETIME, '" + DateTime.Today.ToString("yyyy-dd-MM") + "',103) FROM TURNO WHERE ID_PROF = '" + tbProfesionalID.Text + "' AND fecha >= CONVERT (DATE, '" + strDesde + "') AND fecha <= CONVERT(DATE, '" + strHasta + "');";


            SqlCommand sqlCommand = new SqlCommand(strQuery, myConnection);
            int executeCMD = sqlCommand.ExecuteNonQuery();

            if (executeCMD > 0)
            {
                Dialogos.MostrarMessageDialog("Cancelacion Satisfactoria");
                dgvResultadoDeBusqueda.Rows.Clear();

            }
            else
            {
                Dialogos.MostrarMessageDialog("No habian turnos en el intervalo seleccionado");
 
            }

        }

    }
}
